import random
from pyecharts.charts import Bar, Line, Pie
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig
from pyecharts.charts import Page

# 设置本地路径
CurrentConfig.ONLINE_HOST = 'http://localhost:8000/assets/'

# 生成固定长度的随机数据
def generate_random_data(length):
   x_data = random.choices(Faker.provinces, k=length)  # 生成固定长度的省份列表
   y_data = [random.randint(0, 100) for _ in range(length)]  # 生成固定长度的随机整数列表
   return x_data, y_data

# 创建 Bar 图表
x_data, y_data = generate_random_data(7)
bar = (
   Bar()
   .add_xaxis(x_data)  # 添加x轴数据
   .add_yaxis("y轴", y_data)  # 添加y轴数据
   .set_global_opts(
       title_opts=opts.TitleOpts(title="Bar Chart"),
       tooltip_opts=opts.TooltipOpts(trigger="axis"),
       legend_opts=opts.LegendOpts(is_show=True)
   )
)

# 创建 Line 图表
x_data, y_data = generate_random_data(7)
line = (
   Line()
   .add_xaxis(x_data)  # 添加x轴数据
   .add_yaxis("y轴", y_data)  # 添加y轴数据
   .set_global_opts(
       title_opts=opts.TitleOpts(title="Line Chart"),
       tooltip_opts=opts.TooltipOpts(trigger="axis"),
       legend_opts=opts.LegendOpts(is_show=True)
   )
)

# 创建 Pie 图表
pie = (
   Pie()
   .add("", [list(z) for z in zip(Faker.choose(), Faker.values())])
   .set_global_opts(title_opts=opts.TitleOpts(title="Pie Chart"))
   .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)

# 合并图表到一个页面
page = Page(layout=Page.SimplePageLayout)
page.add(bar, line, pie)

# 渲染 HTML 页面
page.render('combined_chart.html')
